/*
 * Project Name sprint-boot-tools
 * File Name SubmitMsg
 * Package Name com.huxiaosu.tools.cmpp.model.action
 * Create Time 2024/5/7
 * Create by name：liujie
 */
package com.huxiaosu.tools.cmpp.model.action;

import com.huxiaosu.tools.cmpp.model.MessageHeader;
import lombok.Data;
import lombok.ToString;

/**
 * SP 在与 ISMG 建立应用层连接后向 ISMG 提交短信。 短信内容
 *
 * @author liujie
 * @date 2024/5/7 16:32
 */
@SuppressWarnings("AlibabaLowerCamelCaseVariableNaming")
@Data
@ToString
public class SubmitMsg extends MessageHeader {

    /**
     * 信息标识，由 SP 接入的短信网关本身产生，本处填空。
     * <li>此处应该有 ISMG 产生</li>
     */
    private long msgId;

    /**
     * 相同的msgId总数，从1开始
     */
    private byte pkTotal = 0x01;

    /**
     * 相同的msgId总数，从1开始
     */
    private byte pkNumber = 0x01;

    /**
     * 是否要求返回状态报告，0不需要，1需要
     */
    private byte registeredDelivery;

    /**
     * 信息级别
     */
    private byte msgLevel;

    /**
     * 业务标示，企业代码QYN4799901
     * <li>需要和配置的 clientConfig 比较</li>
     */
    private String serviceId;

    /**
     * 计费用户类型字段; 如果是网站发送短信验证码形式这里取值应该是 2
     * <li>0：对目的终端 MSISDN 计费； 接收者计费</li>
     * <li>1：对源终端 MSISDN 计费；发送者计费</li>
     * <li>2：对 SP 计费;</li>
     * <li>3：表示本字段无效，对谁计费参见 Fee_terminal_Id 字段。</li>
     */
    private byte feeUserType;

    /**
     * 被计费用户的号码（如本字节填空，则表示本字段无效，对谁计费参见Fee_UserType 字段，本字段与Fee_UserType 字段互斥）
     */
    private String feeTerminalId;

    /**
     * 被计费号码的类型，真实号码或者虚拟号码 0：真实号码；1： 伪码
     */
    private byte feeTerminalType;

    /**
     * GSM 协议类型。详细是解释请参考GSM03.40 中的 9.2.3.9
     */
    private byte tpPId;

    /**
     * GSM 协议类型。详细是解释请参考GSM03.40 中的 9.2.3.23,仅使用 1 位，右对齐
     */
    private byte tpUdhi = 0x00;

    /**
     * 信息格式
     * <li>0：ASCII 串</li>
     * <li>3：短信写卡操作</li>
     * <li>4：二进制信息</li>
     * <li>8：UCS2 编码</li>
     * <li>15：含 GB 汉字</li>
     */
    private byte msgFmt;

    /**
     * 信息内容来源(SP_Id)
     */
    private String msgSrc;

    /**
     * 资费类别
     * <li>01：对“计费用户号码”免费</li>
     * <li>02：对“计费用户号码”按条计信息费</li>
     * <li>03：对“计费用户号码”按包月收取信息费</li>
     * <li>04：对“计费用户号码”的信息费封顶</li>
     * <li>05：对“计费用户号码”的收费是由 SP 实现</li>
     */
    private String feeType;

    /**
     * 资费代码（以分为单位）
     */
    private String feeCode;

    /**
     * 存活有效期，格式遵循 SMPP3.3 协议
     */
    private String valIdTime;

    /**
     * 定时发送时间，格式遵循 SMPP3.3 协议
     */
    private String atTime;

    /**
     * SP的服务代码或前缀为服务代码的长号码,
     * 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段，该号码最终在用户手机上显示为短消息的主叫号码。
     */
    private String srcId;

    /** 接收信息的用户数量(小于 100 个用户) */
    private byte destUsrTl;

    /** 接收短信的 MSISDN 号码 */
    private String destTerminalId;

    /** 接收短信的用户的号码类型，0：真实号码；1：伪码 */
    private byte destTerminalType;

    /** 信息长度(Msg_Fmt 值为 0 时：<160 个字节；其它<=140 个字节) */
    private byte msgLength;

    /** 信息内容 */
    private String msgContent;

    /** 点播业务使用的LinkID，非点播类业务的MT流程不使用该字段 */
    private String linkID;

}